/**
 * 
 * 创建连接 mysql 数据库实例
 * 
 */

const { Sequelize, Model } = require('sequelize')
const { unset, clone, isArray } = require('lodash')
const { db } = require('../config/config')
const _ = require('lodash')

const sequelize = new Sequelize(
  db.dbName,
  db.user,
  db.password,
  {
    dialect: 'mysql',
    host: db.host,
    port: db.port,
    logging: true, // 打印 sql 执行语句
    timezone: '+08:00', // 中国时区
    define: {
      timestamps: true, // 时间字段使用时间戳
      paranoid: true, // 执行删除操作是使用伪删除
      createdAt: 'created_at', // 重命名该字段
      updatedAt: 'updated_at', // 重命名该字段
      deletedAt: 'deleted_at', // 重命名该字段
      underscored: true, // 驼峰命名改为 _ 命名方式
      freezeTableName: true, // 不会更改模型名称获取表名称
      hooks: {
        afterFind: (e) => {
          if (_.isArray(e)) {
            for (let item of e) {
              for (let o in item.dataValues) {
                if (item.dataValues[o] === null) item.dataValues[o] = ""
              }
            }
          } else {
            for (let key in e.dataValues) {
              if (e.dataValues[key] === null) e.dataValues[key] = ""
            }
          } 
          return e
        }
      }
    }
  }
)

// force: false 不会强制删除已有表新建 为 true 相反
sequelize.sync({ force: false })

module.exports = {
  sequelize
}
